package br.fafica.poo2.rightcode.usuario;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import br.fafica.poo2.rightcode.Aplicacao;
import br.fafica.poo2.rightcode.exception.UsuarioNaoEncontradoException;
import br.fafica.poo2.rightcode.exception.listaUsuarioVaziaException;

public class RepositorioUsuarioMap implements IRepositorioUsuario{
	
	private Map <Integer, Usuario> map;
	private static int increment;
	
	public RepositorioUsuarioMap(){
		map = new HashMap <Integer, Usuario>();
		increment = (getCodigoIncrement()+1);
		System.err.println("CONTRUTOR DE MAP ALUNO");
	}
	
	private int getCodigoIncrement(){
		return map.size();
	}
	
	@Override
	public void TesteUsuario() throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void InstalarUsuario(boolean samples) throws SQLException {
		if(samples){
			Aplicacao app = new Aplicacao();
			for(Usuario u: app.getUsuario()){
				AdicionarUsuario(u);
			}
		}
		
	}

	@Override
	public void AdicionarUsuario(Usuario usuario) throws SQLException {
		if(usuario.getCodigo()==0){
			usuario.setCodigo(increment);
			increment+=1;
		}
		map.put(usuario.getCodigo(), usuario);
		
	}

	@Override
	public ArrayList<Usuario> ListaUsuario() throws SQLException,
			listaUsuarioVaziaException {
		ArrayList <Usuario> array = new ArrayList<Usuario>();
		array.addAll(map.values());
		return array;
	}

	@Override
	public void RemoverUsuario(Usuario usuario) throws SQLException,
			UsuarioNaoEncontradoException {
		if(map.containsKey(usuario.getCodigo())) map.remove(usuario.getCodigo());
		else throw new UsuarioNaoEncontradoException();
	}

	@Override
	public Usuario BuscarUsuario(int codigo) throws SQLException,
			UsuarioNaoEncontradoException {
		
		if(map.containsKey(codigo)) return map.get(codigo);
		else throw new UsuarioNaoEncontradoException();
		
	}

	@Override
	public void EditarUsuario(Usuario usuario)
			throws UsuarioNaoEncontradoException, SQLException {
		Usuario novo=BuscarUsuario(usuario.getCodigo());
		if(novo!=null){
			novo.setNome(usuario.getNome());
			novo.setDisciplinas(usuario.getDisciplinas());
		}else{
			throw new UsuarioNaoEncontradoException();
		}
		
	}

}
